package com.juli.school.utils.log.utils;

import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;

/**
 * @Description: 该类提供对Http Header的一些操作和访问
 * @ClassName: HttpHeaderUtils
 * @author gaoxiang
 * @date 2015年11月28日 上午3:15:42
 */
public final class HttpHeaderUtils {
	
	/**
	 * @Description: 获得真实IP地址
	 * @param request
	 * @return String 返回类型
	 * @author gaoxiang
	 * @date 2015年11月24日 下午10:47:00
	 */
	public static String getRemoteHost(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}
		return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
	}
	
	/**
	 * @Description: 获得referer
	 * @param request
	 * @return String 返回类型
	 * @author gaoxiang
	 * @date 2015年11月24日 下午10:47:11
	 */
	public static String getReferer(HttpServletRequest request) {
		return request.getHeader("Referer");
	}
	
	/**
	 * @Description: 获得URL，同时附加所有参数
	 * @param request
	 * @return String 返回类型
	 * @author gaoxiang
	 * @date 2015年11月24日 下午10:47:43
	 */
	public static String getRequestURLWithParameter(HttpServletRequest request) {
		StringBuffer buffer = request.getRequestURL();
		@SuppressWarnings("unchecked")
		Map<String, String[]> parameter = request.getParameterMap();
		if (null != parameter && !parameter.isEmpty()) {
			buffer.append("?");
			Iterator<String> keys = parameter.keySet().iterator();
			String key = null;
			String[] value = null;
			while (keys.hasNext()) {
				key = keys.next();
				value = request.getParameterValues(key);
				if ((null == value) || (value.length == 0)) {
					buffer.append(key).append("=");
				} else if (value.length > 0) {
					String str = value[0];
					if(str.length()>200) str = StringUtils.substring(value[0], 0, 120);
					buffer.append(key).append("=").append(str);
				}
				if (keys.hasNext()) {
					buffer.append("&");
				}
			}
		}
		return buffer.toString();
	}
	
	/**
	 * @Description: 获得URL，不附加任何输入参数
	 * @param request
	 * @return String 返回类型
	 * @author gaoxiang
	 * @date 2015年11月24日 下午10:47:52
	 */
	public static String getRequestURL(HttpServletRequest request) {
		return request.getRequestURL().toString();
	}
	
}
